package leetcode_1_20;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class myAtoi_8 {
    /**
     * 字符串提取转化整数
     * 要求似乎有数字前面只能有正负符号，其他的直接return 0
     * 思路就是转化为字符数组for循环逐个判断处理
     * 最后返回结果时对异常处理
     * @param s
     */
    static int myAtoi(String s){
        char[] arr=s.toCharArray();
        String result="";
        int count=0,t= arr.length;
        char flag='0';

        if(arr.length==0)
            return 0;
        for (char a:arr  //去掉空格
             ) {
            if(a==' '){
                count++;
            }else
                break;
        }

        if(count==t)
            return 0;
        if(arr[count]=='+'){   //处理符号位
            count++;
        } else if (arr[count]=='-'){
            count++;
            flag='-';
            result+=flag;
        }

        if(count==t)
            return 0;
        if (arr[count] > 57 || arr[count]< 48)   //处理符号位后一位，只要数字前面出现非正负号直接返回0
            return 0;

        for(int i=count;i<t;i++){
             if(arr[i] <= 57&& arr[i] >= 48 ){
                result+=arr[i];
                if( i+1 == t){       //如果没有下个字符直接退出
                    break;
                }else {
                   if(arr[i+1] > 57|| arr[i+1]< 48 )  //下个字符不是数字
                       break;
                   else
                       continue;
                }
             }
        }
        try{
            return Integer.parseInt(result);
        }catch (NumberFormatException e){
            return flag=='-'?-Integer.MIN_VALUE:Integer.MAX_VALUE;
        }

    }

    /**
     * 字符串提取转化整数
     * 要求似乎有数字前面只能有正负符号，其他的直接return 0
     *  尝试使用正则方法
     * @param s
     */
    static int myAtoi2(String s){
        String result="";
        char flag='0';
        if(s.equals(""))
            return 0;
        String p1="^[\\+\\-]?\\d+";  //匹配类似aba
        Pattern pattern1 = Pattern.compile(p1);
        Matcher matcher1=pattern1.matcher(s);
        if(!matcher1.find())
            return 0;
        while(matcher1.find()) {
            result=matcher1.group(0);
            if(result=="")
                return 0;
            if(result.charAt(0) == '-')
                flag='-';
        }
        try{
            return Integer.parseInt(result);
        }catch (NumberFormatException e){
            return flag=='-'?-Integer.MIN_VALUE:Integer.MAX_VALUE;
        }

    }
}
